package com.zzptc.zzsgz;

import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

public class Server {
    private DefaultListModel dt;
    private JTextArea jta;
    private JTextField jtf_message=new JTextField();
    private JTextField jtf_port=new JTextField("4567");
    private JTextField jtf_max=new JTextField("30");
    private JButton jbt1_start=new JButton("启动");
    private JButton jbt2_stop=new JButton("停止");
    private JButton jbt3_send=new JButton("发送");
    //Vector
    private List<Socket> list=new ArrayList<>();
//创建界面
    public  void createUI() {
        JFrame jf = new JFrame("服务器");
        jf.setBounds(200, 200, 500, 300);
        //1、北边JPanel
        JPanel northPane = new JPanel();
        northPane.setLayout(new GridLayout(1, 6));
        northPane.add(new JLabel("人数上限"));
        northPane.add(jtf_max);
        northPane.add(new JLabel("端口"));
        northPane.add(jtf_port);
        northPane.add(jbt1_start);

        jbt2_stop.setEnabled(false);
        northPane.add(jbt2_stop);
        northPane.setBorder(new TitledBorder("配置信息"));
        //2、中间JPanel（分左右两栏）
        //左栏
        dt=new DefaultListModel();
        final JList jl=new JList();
        JScrollPane leftpane=new JScrollPane(jl);
        leftpane.setBorder(new TitledBorder("在线用户"));
        //右栏
        jta=new JTextArea();
        jta.setEditable(false);
        JScrollPane rightpane =new JScrollPane(jta);
        rightpane.setBorder(new TitledBorder("消息显示区"));
        JSplitPane centerPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftpane,rightpane);
        //设置分隔条的大小
        centerPane.setDividerSize(20);
        //设置分隔条的位置
        centerPane.setDividerLocation(100);
        //3、南部JPanel
        JPanel southPanel=new JPanel(new BorderLayout());
        southPanel.setBorder(new TitledBorder("写消息"));
        southPanel.add(jtf_message,BorderLayout.CENTER);

        jf.setLayout(new BorderLayout());
        jf.add(northPane,BorderLayout.NORTH);
        jf.add(centerPane,BorderLayout.CENTER);
        jf.add(southPanel,BorderLayout.SOUTH);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//事件
        serverEvent();


    }
//事件
    private void serverEvent() {
        //点击事件
        jbt1_start.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    ServerSocket ss=new ServerSocket(9999);
                    System.out.println("start");
                    //可以多个客户上QQ
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            while (true) {
                                Socket socket = null;
                                try {
                                    socket = ss.accept();//监听

                                    list.add(socket);//添加到集合中
                                } catch (IOException e1) {
                                    e1.printStackTrace();
                                }
                                System.out.println(socket.getInetAddress());
                            }
                        }
                    }).start();

                } catch (IOException e1) {
                    e1.printStackTrace();
                }

            }
        });
        jtf_message.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                //是否敲击的是回车键
                if(e.getKeyChar()==KeyEvent.VK_ENTER){
                    //向哪里写？客户端   －－－－>都放在集合类对象list
                    //群发   定向发
                    for(Socket s1:list){
                        try {
                            OutputStream out=s1.getOutputStream();//通道打开
//                            PrintStream ps=new PrintStream(out);//高级流封装了低级流   处理流
//                            ps.println(jtf_message.getText());
//                            ps.close();
//                            out.close();

                            PrintWriter pw=new PrintWriter(out,true);
                            pw.println(jtf_message.getText());
                            jtf_message.setText("");//消息发出后，消息文本框清空
                           // pw.close();
                            //out.close();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }


                    }


                }
            }
        });

    }


    public static void main(String[] args) {
        new Server().createUI();
    }

}
